package org.dromara.web.system.domain.bo;

import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.web.system.domain.AppOrder;

/**
 * 订单业务对象 app_order
 *
 * @author Lion Li
 * @date 2025-09-19
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = AppOrder.class, reverseConvertGenerate = false)
public class AppOrderBo extends BaseEntity {

    /**
     * 主键ID
     */
    private Long id;

    /**
     * 订单ID
     */
    private String orderId;

    /**
     * 订单状态 0待下发 1已下发 2待确认 3待接单 4待发货 5运输中 6已送达 7已完成 8费用待确认 9已确认费用 10待支付 11已支付
     */
    private Long orderStatus;

    /**
     * 采购计划ID
     */
    private Long planId;

    /**
     * 供应商代号
     */
    @NotBlank(message = "供应商代号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String supplierCode;

    /**
     * 发货地址
     */
    @NotBlank(message = "发货地址不能为空", groups = { AddGroup.class, EditGroup.class })
    private String deliveryAddress;

    /**
     * 备注
     */
    @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
    private String remark;

    /**
     * 仓库所在地
     */
    @NotBlank(message = "仓库所在地不能为空", groups = { AddGroup.class, EditGroup.class })
    private String warehouseLocation;

    /**
     * 收货地址
     */
    @NotBlank(message = "收货地址不能为空", groups = { AddGroup.class, EditGroup.class })
    private String receiveAddress;

    /**
     * 司机选择方式 0抢单 1指定
     */
    @NotNull(message = "司机选择方式 0抢单 1指定不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long driverSelectType;

    /**
     * 是否压车 0否 1是
     */
    @NotNull(message = "是否压车 0否 1是不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long isPressCar;

    /**
     * 押车费用
     */
    @NotNull(message = "押车费用不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long pressCarFee;

    /**
     * 运输公司名称
     */
    @NotBlank(message = "运输公司名称不能为空", groups = { AddGroup.class, EditGroup.class })
    private String transportCompany;

    /**
     * 纳税人识别号
     */
    @NotBlank(message = "纳税人识别号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String taxpayerId;

    /**
     * 联系人
     */
    @NotBlank(message = "联系人不能为空", groups = { AddGroup.class, EditGroup.class })
    private String contactName;

    /**
     * 联系人方式
     */
    @NotBlank(message = "联系人方式不能为空", groups = { AddGroup.class, EditGroup.class })
    private String contactPhone;

    /**
     * 司机姓名
     */
    @NotBlank(message = "司机姓名不能为空", groups = { AddGroup.class, EditGroup.class })
    private String driverName;

    /**
     * 身份证号
     */
    @NotBlank(message = "身份证号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String driverIdCard;

    /**
     * 司机手机号
     */
    @NotBlank(message = "司机手机号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String driverPhone;

    /**
     * 车牌号
     */
    @NotBlank(message = "车牌号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String carPlate;

    /**
     * 车辆类型
     */
    @NotBlank(message = "车辆类型不能为空", groups = { AddGroup.class, EditGroup.class })
    private String carType;

    /**
     * 车长(米)
     */
    @NotNull(message = "车长(米)不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long carLength;

    /**
     * 载重量(吨)
     */
    @NotNull(message = "载重量(吨)不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long loadCapacity;

    /**
     * 拍照车发货信息
     */
    @NotBlank(message = "拍照车发货信息不能为空", groups = { AddGroup.class, EditGroup.class })
    private String photoLoadInfo;

    /**
     * 拍照车卸货信息
     */
    @NotBlank(message = "拍照车卸货信息不能为空", groups = { AddGroup.class, EditGroup.class })
    private String photoUnloadInfo;

    /**
     * 总重量
     */
    @NotNull(message = "总重量不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long totalWeight;

    /**
     * 去皮重量(装车榜重)
     */
    @NotNull(message = "去皮重量(装车榜重)不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long tareWeightLoad;

    /**
     * 材料装车总重(总重量-去皮重量)
     */
    @NotNull(message = "材料装车总重(总重量-去皮重量)不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long materialLoadWeight;

    /**
     * 过磅总重量(仓库称重)
     */
    @NotNull(message = "过磅总重量(仓库称重)不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long weighingTotalWeight;

    /**
     * 去皮重量(卸车后)
     */
    @NotNull(message = "去皮重量(卸车后)不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long tareWeightUnload;

    /**
     * 材料卸货总重量(过磅总重量-去皮重量)
     */
    @NotNull(message = "材料卸货总重量(过磅总重量-去皮重量)不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long materialUnloadWeight;

    /**
     * 路损
     */
    @NotNull(message = "路损不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long roadLoss;

    /**
     * 扣除吨数
     */
    @NotNull(message = "扣除吨数不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long deductWeight;

    /**
     * 采购净重量
     */
    @NotNull(message = "采购净重量不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long netWeight;

    /**
     * 包数
     */
    @NotNull(message = "包数不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long packageNum;

    /**
     * 仓库标识
     */
    @NotBlank(message = "仓库标识不能为空", groups = { AddGroup.class, EditGroup.class })
    private String warehouseCode;

    /**
     * 入库车辆车牌号
     */
    @NotBlank(message = "入库车辆车牌号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String warehouseCarPlate;

    /**
     * 仓库管理员
     */
    @NotBlank(message = "仓库管理员不能为空", groups = { AddGroup.class, EditGroup.class })
    private String warehouseAdmin;

    /**
     * 入库日期
     */
    @NotNull(message = "入库日期不能为空", groups = { AddGroup.class, EditGroup.class })
    private Date warehouseDate;

    /**
     * 质检信息ID
     */
    @NotNull(message = "质检信息ID不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long qualityId;

    /**
     * 运费
     */
    @NotNull(message = "运费不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long freight;

    /**
     * 押车费
     */
    @NotNull(message = "押车费不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long pressFee;

    /**
     * 货品单价
     */
    @NotNull(message = "货品单价不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long unitPrice;

    /**
     * 贷款金额
     */
    @NotNull(message = "贷款金额不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long loanAmount;


}
